package com.example.demo.Dao;
import com.example.demo.Model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import javax.jws.soap.SOAPBinding;
import java.util.List;
// 不是普通的接口，而是 MyBatis 中的接口
// 需要添加以下注解

@Mapper  // 该注解是数据持久层的标志
public interface UserMapper {

    /**
     * 查询全部信息
     * @return
     */
    List<UserInfo> getAll();

    /**
     * 根据 id 查询用户信息
     * @param uid
     * @return
     */
    UserInfo getUserById(@Param("id") Integer uid);

    /**
     * 探讨 ${} 与 #{} 的区别
     */
    UserInfo login(@Param("username") String username, @Param("password")String password);

    /**
     * ${} 的适用场景：传递 SQL 语句！
     * @param myOrder
     * @return
     */
    List<UserInfo> getAllByOrder(@Param("myOrder")String myOrder);

    /**
     * 删除操作
     */
    int delById(@Param("id") Integer id);

    /**
     * 修改操作
     * @param userInfo
     * @return
     */
    int update(UserInfo userInfo);

    /**
     * 添加操作
     * @param userInfo
     * @return
     */
    int add(UserInfo userInfo);

    /**
     * 返回自增 id
     * @param userInfo
     * @return
     */
    int insert(UserInfo userInfo);

    /**
     * like 查询
     * @param username
     * @return
     */
    List<UserInfo> getLikeList(@Param("username")String username);

    /**
     * 动态 sql
     * if 标签
     * @param userInfo
     * @return
     */
    int add2(UserInfo userInfo);

    /**
     * trim 标签
     * @param userInfo
     * @return
     */
    int add3(UserInfo userInfo);

    /**
     * where 标签
     * @param userInfo
     * @return
     */
    List<UserInfo> getListByWhere(UserInfo userInfo);

    /**
     * set 标签
     * @param userInfo
     * @return
     */
    int update2(UserInfo userInfo);

    /**
     * foreach 标签
     * @param ids
     * @return
     */
    int delByIds(List<Integer> ids);
}
